Conversation
Walkthrough새 검색(feature/serach) 및 도메인(domain/search) 모듈을 추가하고, 메인 내비게이션에 검색 그래프를 연동했습니다. 첫 실행 시(Search 미진입 시) 검색 화면으로 이동하는 흐름을 도입했습니다. 디자인 시스템에 검색바 컴포넌트를 추가했고, PlaceCard 아이콘 배경색 매핑을 변경했습니다. Gradle 설정과 종속성도 갱신되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant Activity as MainActivity
participant MainScreen
participant Nav as NavController
participant Search as SearchGraph
User->>Activity: 앱 실행
Activity->>MainScreen: setContent(isFreshLaunch = savedInstanceState == null)
alt isFreshLaunch == true
MainScreen->>Nav: observe current destination
MainScreen->>Nav: navigateSearch(navOptions: popUpTo(0), launchSingleTop)
Nav->>Search: show SearchRoute
else 기존 흐름
MainScreen->>Nav: 기존 그래프 유지
end
sequenceDiagram
autonumber
actor User
participant UI as SearchScreen
participant VM as SearchViewModel
participant Nav as NavController
User->>UI: 텍스트 입력/수정
UI->>VM: Intent.QueryChanged
VM->>VM: 250ms 디바운스 후 검색
VM->>UI: State(isLoading / results)
User->>UI: 엔터/검색 아이콘
UI->>VM: Intent.Submit
VM->>UI: State 업데이트
User->>UI: 결과 아이템 클릭
UI->>VM: Intent.ClickItem(id)
VM-->>UI: SideEffect.NavigateToPlaceDetail(townId, placeId)
UI->>Nav: navigate to PlaceDetail
User->>UI: "찾는 장소가 없어요" 클릭
UI->>VM: Intent.ClickNoResult
VM-->>UI: SideEffect.NavigateToNoResult
UI->>Nav: navigate to NoResult
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (3 warnings)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (9)
domain/search/src/main/java/com/teamsolply/solply/search/MyClass.kt (1)
3-3: 의미 없는 플레이스홀더 클래스 제거 검토
MyClass가 비어 있는 상태로 남아 있으면 추후 실제 구현과 충돌하거나 불필요한 참조가 생길 수 있습니다. 지금 단계에서 사용 목적이 없다면 파일을 제거하거나, 필요한 실제 도메인 로직/모델로 대체하는 편이 좋겠습니다.feature/serach/src/main/java/com/teamsolply/solply/search/component/SearchItem.kt (1)
97-104: 프리뷰용 PlaceType 값 오타실제 enum 값이
WALKING인데"WALK"으로 찾고 있어 항상PlaceType.ALL로 fallback 됩니다. 프리뷰라도 의도와 다르니 값 교정이 좋겠습니다.- val walk = PlaceType.entries.firstOrNull { it.name == "WALK" } ?: PlaceType.ALL + val walk = PlaceType.entries.firstOrNull { it.name == "WALKING" } ?: PlaceType.ALLfeature/main/build.gradle.kts (1)
14-14: 모듈 이름 철자serach→search로 정비 필요새 기능이 “Search”를 의미하는데 모듈/의존성 이름이 모두
serach로 등록되어 있습니다. 지금 바로 정리하지 않으면 이후 레이어 전반에 오타가 굳어져 유지보수가 어려워집니다. 모듈 디렉터리와 Gradle 식별자를search로 통일해 주세요.feature/serach/src/main/java/com/teamsolply/solply/search/SearchContract.kt (2)
13-15: Public API에서 PersistentList 노출 지양(ImmutableList로 완화 권장)구현 세부(퍼시스턴트 컬렉션) 노출을 줄이기 위해
PersistentList대신ImmutableList(또는 단순List)로 표면화하는 것이 좋습니다. 기본값은 그대로persistentListOf()를 사용해도 됩니다.import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf data class SearchState( val query: String = "", val isLoading: Boolean = false, - val results: PersistentList<SearchItemUi> = persistentListOf(), + val results: ImmutableList<SearchItemUi> = persistentListOf(), val selectedTownId: Long? = null )Also applies to: 7-8
21-26: id 네이밍을 placeId로 명확화(가독성/일관성 향상)
SearchItemUi.id와ClickItem(id)는 의미상 장소 식별자이므로placeId로 변경 시 의도가 선명해집니다. 초기 단계라면 지금 반영하는 편이 장기 유지보수에 유리합니다(호출부 전반 수정 필요).data class SearchItemUi( - val id: Long, + val placeId: Long, val name: String, val tag: PlaceType, val address: String, val imageUrl: String ) sealed interface SearchIntent : UiIntent { data class QueryChanged(val value: String) : SearchIntent data object ClearQuery : SearchIntent data object Submit : SearchIntent - data class ClickItem(val id: Long) : SearchIntent + data class ClickItem(val placeId: Long) : SearchIntent data object ClickNoResult : SearchIntent data object Retry : SearchIntent }Also applies to: 32-33
feature/serach/src/main/java/com/teamsolply/solply/search/SearchScreen.kt (4)
41-50: LaunchedEffect 중복 및 키 보강(뷰모델에 바인딩하고 하나로 합치기)동일 키(Unit)로 두 개의
LaunchedEffect를 사용 중입니다.viewModel을 키로 하나의 블록에 합치면 수명 관리가 명확해지고 재수집 이슈를 줄일 수 있습니다.- LaunchedEffect(Unit) { - viewModel.sideEffect.collectLatest { se -> - when (se) { - is SearchSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(se.townId, se.placeId) - SearchSideEffect.NavigateToNoResult -> onNoPlaceClick() - } - } - } - LaunchedEffect(Unit) { viewModel.sendIntent(SearchIntent.Retry) } + LaunchedEffect(viewModel) { + viewModel.sendIntent(SearchIntent.Retry) + viewModel.sideEffect.collectLatest { se -> + when (se) { + is SearchSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(se.townId, se.placeId) + SearchSideEffect.NavigateToNoResult -> onNoPlaceClick() + } + } + }
121-130: 불필요한 toImmutableList 제거 및 리스트 key 추가이미
PersistentList이므로 복사/변환 불필요합니다. 또한itemsIndexed에key를 제공해 항목 식별 안정성과 성능을 개선하세요.-import kotlinx.collections.immutable.toImmutableList @@ - val items = state.results.toImmutableList() - itemsIndexed(items) { _, item -> + itemsIndexed( + state.results, + key = { _, item -> item.id } // placeId로 이름 변경 시 item.placeId + ) { _, item -> SearchItem( - placeName = item.name, - placeTag = item.tag, - placeAddress = item.address, - placeImageUrl = item.imageUrl, - onClick = { onClickItem(item.id) } + placeName = item.name, + placeTag = item.tag, + placeAddress = item.address, + placeImageUrl = item.imageUrl, + onClick = { onClickItem(item.id) } // placeId로 이름 변경 시 item.placeId ) }Also applies to: 29-29
82-84: 하드코딩 문자열 → stringResource로 i18n/접근성 강화문자열을 리소스로 분리하고
stringResource를 사용하세요. 접근성용 contentDescription도 리소스화 권장합니다.import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import com.teamsolply.solply.search.R @@ - SolplyTopBar( - barText = "검색하기", + SolplyTopBar( + barText = stringResource(R.string.search_title), onBackButtonClick = onBack ) @@ - Text( - text = "검색 결과 ${state.resultCount}개", + Text( + text = stringResource(R.string.search_result_count, state.resultCount), style = SolplyTheme.typography.button14M, color = SolplyTheme.colors.gray800, modifier = Modifier.padding(start = 20.dp, top = 32.dp, bottom = 16.dp) ) @@ - Text( - text = "찾는 장소가 없어요", + Text( + text = stringResource(R.string.search_no_result), style = SolplyTheme.typography.button14M, color = SolplyTheme.colors.gray700, modifier = Modifier.weight(1f) ) Icon( painter = painterResource(id = com.teamsolply.solply.designsystem.R.drawable.ic_arrow_right_icon), - contentDescription = "arrow-right-icon", + contentDescription = stringResource(R.string.cd_arrow_right), tint = SolplyTheme.colors.gray700 )추가 리소스(참고):
<!-- feature/serach/src/main/res/values/strings.xml --> <resources> <string name="search_title">검색하기</string> <string name="search_result_count">검색 결과 %1$d개</string> <string name="search_no_result">찾는 장소가 없어요</string> <string name="cd_arrow_right">다음으로 이동</string> </resources>Also applies to: 101-106, 147-158, 21-22
1-1: 모듈 경로 오타: feature/serach → feature/search로 정리 권장경로 오타는 IDE 검색/탐색, 스크립트, 신규 팀원의 탐색성을 해칩니다. 모듈/패키지/gradle 설정 일괄 리네임을 고려해주세요.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (22)
app/build.gradle.kts(1 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt(1 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/searchbar/SolplySearchBar.kt(1 hunks)domain/search/.gitignore(1 hunks)domain/search/build.gradle.kts(1 hunks)domain/search/src/main/java/com/teamsolply/solply/search/MyClass.kt(1 hunks)feature/main/build.gradle.kts(1 hunks)feature/main/src/main/java/com/teamsolply/solply/main/MainActivity.kt(1 hunks)feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt(2 hunks)feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt(3 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/PlaceDetailBottomSheet.kt(0 hunks)feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt(0 hunks)feature/serach/.gitignore(1 hunks)feature/serach/build.gradle.kts(1 hunks)feature/serach/proguard-rules.pro(1 hunks)feature/serach/src/main/AndroidManifest.xml(1 hunks)feature/serach/src/main/java/com/teamsolply/solply/search/SearchContract.kt(1 hunks)feature/serach/src/main/java/com/teamsolply/solply/search/SearchScreen.kt(1 hunks)feature/serach/src/main/java/com/teamsolply/solply/search/SearchViewModel.kt(1 hunks)feature/serach/src/main/java/com/teamsolply/solply/search/component/SearchItem.kt(1 hunks)feature/serach/src/main/java/com/teamsolply/solply/search/navigation/SearchNavigation.kt(1 hunks)settings.gradle.kts(1 hunks)
💤 Files with no reviewable changes (2)
- feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt
- feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/PlaceDetailBottomSheet.kt
👮 Files not reviewed due to content moderation or server errors (5)
- app/build.gradle.kts
- feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt
- domain/search/build.gradle.kts
- feature/main/src/main/java/com/teamsolply/solply/main/MainActivity.kt
- feature/serach/build.gradle.kts
🧰 Additional context used
🧬 Code graph analysis (6)
feature/serach/src/main/java/com/teamsolply/solply/search/component/SearchItem.kt (4)
core/ui/src/main/java/com/teamsolply/solply/ui/text/TextUtil.kt (1)
formatTextToPlaceItemTitle(66-70)core/ui/src/main/java/com/teamsolply/solply/ui/image/AdaptationImage.kt (1)
AdaptationImage(15-69)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/chip/PlaceTag.kt (1)
PlaceTag(15-54)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/theme/Theme.kt (1)
SolplyTheme(46-53)
feature/serach/src/main/java/com/teamsolply/solply/search/SearchScreen.kt (3)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/topbar/SolplyTopBar.kt (1)
SolplyTopBar(21-54)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/searchbar/SolplySearchBar.kt (1)
SolplySearchbar(27-85)feature/serach/src/main/java/com/teamsolply/solply/search/component/SearchItem.kt (1)
SearchItem(29-90)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/searchbar/SolplySearchBar.kt (1)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/theme/Theme.kt (1)
SolplyTheme(46-53)
feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt (2)
feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1)
rememberMainNavigator(151-156)feature/serach/src/main/java/com/teamsolply/solply/search/navigation/SearchNavigation.kt (1)
searchNavGraph(16-30)
feature/serach/src/main/java/com/teamsolply/solply/search/navigation/SearchNavigation.kt (2)
feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1)
navigate(38-75)feature/serach/src/main/java/com/teamsolply/solply/search/SearchScreen.kt (1)
SearchRoute(32-61)
feature/serach/src/main/java/com/teamsolply/solply/search/SearchViewModel.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/base/BaseViewModel.kt (2)
reduce(44-46)postSideEffect(48-52)
🔇 Additional comments (7)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt (1)
58-62: 기본 타입 배경색 변경 의도 확인 필요기본(
else) 케이스의 배경색을purple500으로 바꾸면 아이콘 색(gray400)과의 대비가 줄어들어 가독성이 떨어질 수 있습니다. 의도된 디자인인지 한 번 더 확인해 주세요.feature/serach/.gitignore (1)
1-1: /build 무시 규칙 추가 👍새 모듈의 빌드 산출물을 깔끔하게 제외할 수 있어요. 잘 적용하셨습니다.
domain/search/.gitignore (1)
1-1: /build 무시 규칙 추가 👍도메인 모듈에서도 동일한 제외 규칙이 필요했는데 잘 챙겨주셨습니다.
feature/serach/src/main/AndroidManifest.xml (1)
1-4: 빈 매니페스트 구성 OK현재는 컴포넌트 선언이 없지만, 모듈 등록용 기본 매니페스트로 적절합니다.
feature/serach/proguard-rules.pro (1)
1-21: 프로가드 기본 템플릿 확보 완료향후 난독화 규칙을 추가할 때 여기서 바로 관리할 수 있어 좋습니다.
settings.gradle.kts (1)
66-67: 모듈 include 이름도search로 통일해야 합니다위에서 언급한 대로 feature 모듈 철자 오타가 settings에도 반복되고 있습니다. 실제 기능명을 반영하도록
:feature:search로 정리해 주세요.feature/serach/src/main/java/com/teamsolply/solply/search/SearchContract.kt (1)
37-40: 계약(사이드 이펙트) 정의 깔끔합니다네이게이션 목적의 사이드 이펙트 분리와 페이로드 구성 모두 적절합니다.
| BasicTextField( | ||
| value = query, | ||
| onValueChange = onQueryChange, | ||
| modifier = modifier | ||
| .weight(1f) | ||
| .fillMaxWidth() | ||
| .focusRequester(focusRequester), |
There was a problem hiding this comment.
weight import 누락으로 컴파일이 실패합니다.
Line 58에서 .weight(1f)를 호출하지만 androidx.compose.foundation.layout.weight import가 없어서 빌드가 멈춥니다. 아래처럼 import를 추가해 주세요.
+import androidx.compose.foundation.layout.weight📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| BasicTextField( | |
| value = query, | |
| onValueChange = onQueryChange, | |
| modifier = modifier | |
| .weight(1f) | |
| .fillMaxWidth() | |
| .focusRequester(focusRequester), | |
| // Add at the top of SolplySearchBar.kt alongside the other Compose imports | |
| import androidx.compose.foundation.layout.weight |
🤖 Prompt for AI Agents
In
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/searchbar/SolplySearchBar.kt
around lines 54 to 60, the call to .weight(1f) causes a compile error because
the androidx.compose.foundation.layout.weight import is missing; add the import
statement for androidx.compose.foundation.layout.weight at the top of the file
(with the other imports) so Modifier.weight is resolved and the file compiles.
| LaunchedEffect(navController) { | ||
| val initialDestination = snapshotFlow { navController.currentBackStackEntry } | ||
| .filterNotNull() | ||
| .first() | ||
| .destination | ||
|
|
||
| if (!initialDestination.hasRoute(Search::class)) { | ||
| val initialNavOptions = navOptions { | ||
| popUpTo(0) { | ||
| inclusive = true | ||
| } | ||
| launchSingleTop = true | ||
| } | ||
| navigator.navigateToSearch(initialNavOptions) | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
초기 백스택 조회가 영원히 완료되지 않는 버그가 있습니다
navController.currentBackStackEntry는 Compose 스냅샷 상태가 아니어서 snapshotFlow가 이후 변경을 감지하지 못합니다. 첫 읽기가 null이면 filterNotNull().first()가 끝까지 대기하여 검색 화면으로의 초기 진입이 절대 실행되지 않습니다. 콜드 스타트에서 실제로 이런 상황이 발생하기 때문에 필수 수정이 필요합니다.
LaunchedEffect(navController) {
- val initialDestination = snapshotFlow { navController.currentBackStackEntry }
- .filterNotNull()
- .first()
- .destination
+ val initialDestination = navController.currentBackStackEntryFlow
+ .filterNotNull()
+ .first()
+ .destinationimport androidx.navigation.currentBackStackEntryFlow 추가도 함께 필요합니다.
🤖 Prompt for AI Agents
In feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt around
lines 71-87, the use of snapshotFlow { navController.currentBackStackEntry }
never observes later changes because currentBackStackEntry is not a Compose
snapshot state; replace it with navController.currentBackStackEntryFlow and
change the await to use filterNotNull().first() on that flow to obtain the
initial destination without hanging, and add the import
androidx.navigation.currentBackStackEntryFlow at the top of the file.
| import com.teamsolply.solply.model.PlaceType | ||
| import com.teamsolply.solply.ui.extension.customClickable | ||
| import com.teamsolply.solply.ui.image.AdaptationImage | ||
| import formatTextToPlaceItemTitle |
There was a problem hiding this comment.
임포트 구문 때문에 컴파일이 실패합니다
Kotlin 최상위 함수는 FQCN으로 임포트해야 합니다. 현재 import formatTextToPlaceItemTitle는 패키지명이 없어 빌드 에러가 발생합니다.
적용 diff는 아래와 같습니다.
-import formatTextToPlaceItemTitle
+import com.teamsolply.solply.ui.text.formatTextToPlaceItemTitle📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import formatTextToPlaceItemTitle | |
| import com.teamsolply.solply.ui.text.formatTextToPlaceItemTitle |
🤖 Prompt for AI Agents
In
feature/serach/src/main/java/com/teamsolply/solply/search/component/SearchItem.kt
around line 27, the import line "import formatTextToPlaceItemTitle" is missing
the package FQCN and causes a compile error; update the import to the function's
fully-qualified package name (e.g. import
com.teamsolply.solply.utils.formatTextToPlaceItemTitle or the actual package
where the top-level function is declared), save, and ensure the file compiles.
| fun NavController.navigateSearch(navOptions: NavOptions) { | ||
| navigate(Search, navOptions) | ||
| } |
There was a problem hiding this comment.
navigate 확장 함수 import 누락으로 컴파일 오류 발생
Line 13에서 navigate(Search, navOptions)를 호출하지만, 이를 제공하는 com.teamsolply.solply.navigation.navigate 확장 함수를 import하지 않아 컴파일 단계에서 Unresolved reference: navigate 오류가 발생합니다. 아래와 같이 import를 추가해주세요.
import androidx.navigation.compose.composable
import com.teamsolply.solply.navigation.Route
+import com.teamsolply.solply.navigation.navigate📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| fun NavController.navigateSearch(navOptions: NavOptions) { | |
| navigate(Search, navOptions) | |
| } | |
| import androidx.navigation.compose.composable | |
| import com.teamsolply.solply.navigation.Route | |
| import com.teamsolply.solply.navigation.navigate |
🤖 Prompt for AI Agents
In
feature/serach/src/main/java/com/teamsolply/solply/search/navigation/SearchNavigation.kt
around lines 12 to 14, the call to navigate(Search, navOptions) fails to compile
because the extension function com.teamsolply.solply.navigation.navigate is not
imported; add an import for com.teamsolply.solply.navigation.navigate at the top
of the file so the extension function is resolved and the call compiles.
| onQueryChange = { | ||
| onQueryChanged(it) | ||
| if (it.isBlank()) { | ||
| onClearQuery() | ||
| } | ||
| }, |
There was a problem hiding this comment.
빈 문자열 입력 시 이중 인텐트 전송 가능성 제거
현재 빈 문자열일 때 QueryChanged와 ClearQuery가 모두 호출될 수 있습니다. 중복 요청/연산을 줄이도록 분기에서 하나만 보내세요.
- onQueryChange = {
- onQueryChanged(it)
- if (it.isBlank()) {
- onClearQuery()
- }
- },
+ onQueryChange = { text ->
+ if (text.isBlank()) onClearQuery() else onQueryChanged(text)
+ },📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| onQueryChange = { | |
| onQueryChanged(it) | |
| if (it.isBlank()) { | |
| onClearQuery() | |
| } | |
| }, | |
| onQueryChange = { text -> | |
| if (text.isBlank()) onClearQuery() else onQueryChanged(text) | |
| }, |
🤖 Prompt for AI Agents
feature/serach/src/main/java/com/teamsolply/solply/search/SearchScreen.kt around
lines 91-96: 현재 빈 문자열 입력 시 onQueryChanged와 onClearQuery가 둘 다 호출되어 중복 인텐트가 발생할 수
있으니, 입력이 빈 문자열인지 먼저 검사하여 빈 문자열이면 onClearQuery만 호출하고 그렇지 않으면 onQueryChanged를
호출하도록 분기 순서를 바꿔(또는 early return 사용) 한 번만 실행되게 수정하세요.
| id = 2, | ||
| name = "솔플리솔플리", | ||
| tag = PlaceType.BOOKSTORE, | ||
| imageUrl = "" | ||
| ), |
There was a problem hiding this comment.
필수 생성자 인자 누락으로 컴파일 에러가 납니다
SearchItemUi는 address가 필수 파라미터인데, 두 번째 더미 데이터에서 누락되어 컴파일이 실패합니다. 값 추가가 필요합니다.
다음 수정으로 해결할 수 있습니다:
SearchItemUi(
id = 2,
name = "솔플리솔플리",
tag = PlaceType.BOOKSTORE,
- imageUrl = ""
+ address = "주소주소주소주소",
+ imageUrl = ""
),🤖 Prompt for AI Agents
In feature/serach/src/main/java/com/teamsolply/solply/search/SearchViewModel.kt
around lines 104 to 108, the second dummy SearchItemUi is missing the required
constructor parameter `address`, causing a compile error; add a suitable address
value (e.g., an empty string or realistic dummy address) to that SearchItemUi
instantiation so all required parameters match the class constructor.
📌 PR 요약
🌱 작업한 내용
🌱 PR 포인트
📸 스크린샷
📮 관련 이슈
Summary by CodeRabbit